package com.cool.shark.service.Impl;

import com.cool.shark.ex.ServiceException;
import com.cool.shark.mapper.AddressMapper;
import com.cool.shark.pojo.dto.AddressAddDto;
import com.cool.shark.pojo.entity.Address;
import com.cool.shark.pojo.vo.AddressByIdVo;
import com.cool.shark.service.AddressService;
import com.cool.shark.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Name: AddressServiceImpl
 * @Author: 西风残叶
 * @Date: 2024/4/28 18:54
 * @Version: 1.0
 * @TODO: TODO
 */
@Service
@Slf4j
public class AddressServiceImpl implements AddressService {
    @Autowired
    private AddressMapper mapper;
    /**
     * 添加地址信息。
     *
     * @param addressAddDto 地址添加数据传输对象，包含添加地址所需的全部信息。
     *                      该参数用于将前端传来的地址信息进行封装，以便于后续的地址信息入库操作。
     * @return 无返回值。地址信息添加成功后，通常会通过其他方式（例如前端界面的提示）告知用户操作结果。
     */
    @Override
    public void addAddress(AddressAddDto addressAddDto) {
        log.info("添加地址信息：{}", addressAddDto);
        // 判断该用户是否已经存在该地址信息
        if (mapper.selectByUserIdAndTitle(addressAddDto) > 0) {
            String message = "该用户已经存在该地址信息";
            throw new ServiceException(ServiceCode.ERR_BAD_REQUEST, message);
        }
        Address address = new Address();
        // 将addressAddDto复制给address
        BeanUtils.copyProperties(addressAddDto, address);
        log.info("address:{}", address);
        int insert = mapper.insert(address);
        if (insert != 1) {
            String message = "添加地址信息失败";
            throw new ServiceException(ServiceCode.ERR_INSERT_FAILED, message);
        }
        log.info("添加地址信息成功");
    }

    /**
     * 根据提供的ID列出选定的项。
     *
     * @param id 项的唯一标识符。
     *           注意：此方法不返回任何内容，而是通过某种方式（例如，更新UI）在调用者中直接显示所选项的信息。
     * @return
     */
    @Override
    public List<AddressByIdVo> listSelectById(Long id) {
        log.info("根据提供的ID列出选定的项：{}", id);
        List<AddressByIdVo> list = mapper.listSelectById(id);
        if (list.isEmpty()) {
           String msg = "没有相关收货信息,请先添加收货信息.";
           throw new ServiceException(ServiceCode.ERR_NOT_FOUND, msg);
        }
        log.info("list:{}", list);
        return list;
    }
}
